<?php

/**
 * 控制器基类
 *
 * @author tony
 *
 */

namespace app\common\controller;
use app\common\model\Manage as ManageModel;
use app\common\model\User as UserModel;

use think\Controller;
use think\facade\Log;

class Base extends Controller
{

    protected function initialize()
    {
        parent::initialize();
        error_reporting(E_ALL ^ E_NOTICE);              //错误等级
        //初始化配置参数，用于在模板中使用
        $this->assign('params',config('params.'));
   
        // 获取管理员ID, 并获取会话
        if(request()->controller() == "Common" && request()->action() == "heartbeat" && session('?manage') && session('?manage.id')){   
            $manageModel = new ManageModel();
            $sessionInfo = $manageModel->getSessionById(session('manage.id'));  
  
            // 这里要判定管理员账号是否还存在，如果不存在则为强制下线。
            if($sessionInfo != session_id()) {
                 
                $where[] = ['id', 'eq', session('manage.id')];
                $mgr_info = $manageModel->where($where)->find();  
                if (!$mgr_info) {
                    // 向客户端展示提醒信息
                    $err = [
                        'status' => false,
                        'msg' => "你的账号已被管理员强制下线！"
                    ];
                    echo json_encode($err);
                } else {
                    // 这里登录IP应该应发生了变化 
                    $clientIp = session('LoginIP'); 
                    // 向客户端展示提醒信息
                    $err = [
                        'status' => false,
                        'msg' => "你的账号已在其它地方(IP:{$clientIp})登录！"
                    ];
                    echo json_encode($err);
                }
                
                session('manage', NULL);
                session('ACTIONTIME', NULL);
                die(); 
            } else {
                // 会话超时判定
                $old_time = session('ACTIONTIME');
                if($old_time == ''){ 
                    $old_time = time(); 
                    session('ACTIONTIME', $old_time);
                }

                $config = $this->app->config->get();
                if(time() - $old_time > $config['session']['action_expire_time']){ 
                    session('manage', NULL);
                    $err = [
                        'status' => false,
                        'msg' => '会话已超时，请重新登录！'
                    ];
                    echo json_encode($err);
                    session('ACTIONTIME', NULL);
                    die();
                }
            }
        } 
    }
}
